介绍线性代数和矩阵的一些操作
2.1 标量,向量,矩阵和张量
- 标量:只是一个数字。
- 向量:一串数字,相当于一维数组。一般默认向量都是列向量。
- 矩阵:一个2维的数组,需要用2个索引才可以确定其中一个元素。例如第$i$行,$j$列。
- 张量:维数大于2的数组,例如一个3维的张量A,需要坐标$(i,j,k)$才能确定其中一个元素。
矩阵的转置:
$$
(A^T)_{i,j}=A_{j,k}
$$
向量只有一行/一列,向量转置可以看做只有一列的矩阵的转置。标量转置还是它自己。
矩阵加法,$A,B$都是矩阵
$$
C = A + B
$$
表示:
$$
C_{i,j}=A_{i,j}+B_{i,j}
$$
标量加或者乘以矩阵,$B$是矩阵,$a,c$是标量:
$$
D=a \cdot B + c
$$
表示:
$$
D_{i,j}=a \cdot B_{i,j} + c
$$
向量和矩阵相加,虽然看上去不那么合适,但是在深度学习中经常看到,$A$是矩阵,$b$是向量,那么:
$$
C=A+b
$$
表示:
$$
C_{i,j}=A_{i,j} + b_j
$$
即$A$的每一行都加上$b$。
2.2 矩阵、向量的乘
$A$是$m \times n$的矩阵,$B$是$n \times p$的矩阵,那么
$$
C=AB
$$
$C$是$m \times p$的矩阵。其中
$$
C_{i,j}=\sum_kA_{i,k}B_{k,j}
$$
上面的这种矩阵乘法叫做element-wise product或Hadamard product,表示为$A \odot B$
还有一种矩阵乘法,叫做doc product,即点乘,这时两个矩阵维数相同,例如
$$
C=AB
$$
表示
$$
C_{i,j}=A_{i,j}B_{i,j}
$$
矩阵乘法满足一些乘法额定律:
分配律:
$$
A(B+C)=AB+AC
$$
结合律
$$
A(BC)=(AB)C
$$
不满足交换律,但是向量相乘满足交换律
$$
x^Ty=y^Tx
$$
矩阵乘积的转置有如下形式
$$
(AB)^T=B^TA^T
$$
除了上面的性质外,还应该知道一些特性:
线性等式:
$$
Ax=b
$$
其中$A \in R^{m \times n}$是矩阵,$b \in R^m$是向量,$A,b$都是已知的,$x \in R^n$是未知的。上面的矩阵乘法的等式相当于提供了表达等式的一种方式。
2.3 矩阵求逆和单位矩阵
假设$I_n$是一个单位矩阵,$I_n \in R^{m \times n}$,那么
$$
\forall x \in R^n, I_n x = x
$$
单位矩阵,对角线上的数字都是1,其他部分数字全是0。
菊展$A$的逆表示为$A^{-1}$,有
$$
A^{-1}A=I_n
$$
那么2.2节中的等式
$$
Ax=b
$$
可以求解得到
$$
x=A^{-1}b
$$
当然,$A^{-1}$的存在是有条件的,不是每个矩阵都存在逆矩阵的。
当逆矩阵$A^{-1}$存在时,有不同的算法来闭式计算它。但是在计算机中,表示小数的精确度有限,因此有时并不能十分精确的得到$A^{-1}$,只能得到一个近似的估计值。
2.4 线性依赖和跨度
等式
$$
Ax=b
$$
如果$A^{-1}$,那么上面的等式对于不同的$b$必须只有一个解。但是也可能存在没有解或者有无数个解。对于特定具体的$b$,如果$x$和$y$都是解,那么下面也是一个解
$$
z=\alpha x + (1-\alpha)y
$$
也是一个解。其中$\alpha$是实数,那么这样就存在无数个解。
为了分析上面等式有多少个解,把$A$的每一列看做不同的方向,有多少条路可以到达$b$。这样,$x$的每个元素表示在对应的方向上走多远,$x_i$表示在第$i$列上移动多远:
$$
Ax=\sum_i x_i A_{:,i}
$$
上式这个操作叫做线性组合。
一个向量集合的生成空间是:这个向量集线性组合的所有点组成的空间。
$Ax=B$是否有解,在于$b$是否在$A$列向量集合的线性空间中。这个特殊的范围叫做列空间。
为了使$Ax=b$有解,$b \in R^m$,矩阵$A$的列空间应该包含$R^m$。矩阵有$n$列,即$n \geq m$。
$n \geq m$也只是必要条件,不是充分条件。因为有些列可能是冗余的;例如2列完全形同。这样的冗余叫做线性依赖。如果一个向量集线性独立,那么这个集合中的任何一个向量,都不能由其他向量的线性组合得到。这样,如果矩阵$A$的列空间包含$R^m$,那么它至少要有$m$个线性独立的列向量。这才是$Ax=b$有解的充分必要条件。
为了使矩阵$A$的逆存在,对于每一个$b$,等式$Ax=b$都应该至多有一个解。这样$A$最多有$m$列,否则可能会有多个解。
总和上面,矩阵$A$必须是个方阵,即$m=n$,且$A$的列线性独立。这样的矩阵叫做奇异矩阵。
只有$A$是奇异矩阵时才可以使用矩阵求逆的方法求解。
2.5 范数
范数可以衡量向量的大小,一个向量的$L^p$范数定义如下:
$$
||x||_p=\big(\sum_i |x_i|^p\big)^{\frac{1}{p}}
$$
其中$p \in R, p \geq 1$
范数可以看做是向量到一个标量的映射函数,只要符合以下性质,都可以看做范数:
$f(x) = 0 \Rightarrow x=0$
$f(x+y) \leq f(x) + f(y)$(三角不等式)
$\forall \alpha \in R, f(\alpha x) = |\alpha|f(x)$
$L^2$范数是著名的欧几里得范数,它是原点到向量的欧拉距离。它可以省去下标,简写为$||x||$,$L^2$的平方形式等于$x^T x$。
$平方形式的L^2$范数在机器学习中用的最广,它的导数只和对应的项有关。但是平方形式的$L^2$范数在原点附近时,增长太慢。在一些机器学习的应用中,要十分严格区分0和非0的区别,这时可以使用$L^1$范数
$$
||x||_1=\sum_i|x_i|
$$
有时需要向量中非零元素的大小,有些人称作$L^0$范数,实际上没有$L^0$范数,可以使用$L^1$范数取代它。
在机器学习中经常用到$L^{\infty}$范数,称作最大范数(max norm),它的简化形式就是向量中最大数的幅度
$$
||x||_{\infty}=\max_i|x_i|
$$
在深度学习中,经常需要衡量矩阵的大小,这时使用Frobenius范数
$$
||A||_F=\sqrt{\sum_{i,j}A_{i,j}^2}
$$
和向量的$L^2$范数类似。
两个向量的点乘可以写作范数的形式
$$
x^T y = ||x||_2 ||y||_2 \cos \theta
$$
其中$\theta$是$x$和$y$的夹角。
2.6特殊矩阵和向量
对角矩阵:只有对角元素非零,其他元素都为零。$D$是对角元素,那么$D_{i,j}=0, i \neq j$。单位矩阵$I$就是对角矩阵。diag($v$)表示对角方形矩阵的对角元素组成的向量。计算和对角方阵的的乘积十分高效,例如计算diag($v$)$x$=$v \odot x$。对角元素不为零的对角方阵才存在逆矩阵,$diag(v)^{-1}=diag([1/v_1,…,1/v_n]^T)$
对角矩阵不一定是方形矩阵,但是只有方形对角矩阵才存在逆矩阵。非方形的对角矩阵相乘的代价也很小。
对称矩形是矩阵等于其转置
$$
A = A^T
$$
生成矩阵时,如果由2个变量的函数生成,且变量顺序无关,那么经常会生成对称矩阵,因为对称矩阵中$A{i,j}=A{j,i}$。
单位向量是指其范围为1
$$
||v||_2=1
$$
如果两个向量$x,y$正交,那么$x^Ty=0$;如果这两个向量的范数不为零,那么它们之间的角度为90度。在$R^n$中,至多有n个互相正交的非零向量。如果正交向量的范数为1,那么叫做标准正交。
正交矩阵的行和列都是正交的
$$
A^TA=AA^T=I
$$
即
$$
A^{-1}=A^T
$$
可以看出,计算正交矩阵的逆十分简单。
2.7 特征分解
数学上的物体,可以分解。例如12可以分解为2x2x3;这样可以得知它不能被5整除,但是可以被3整除。同理,矩阵也可以分解。
用的最广的矩阵分解是特征向量和特征值。矩阵$A$的非零特征向量$v$,$A$乘以它可以得到缩放/放大的$v$
$$
A v = \lambda v
$$
其中,$\lambda$是对应的特征值。上式还有另一种形式$v^T A=\lambda v^T$。
如果$v$是特征向量,那么它缩放后依然是特征向量,所以我们只关心单位特征向量。
假设$A$有$n$个线性无关的特征向量${v^{(1)}, …, v^{(n)}}$,对应的特征值为${\lambda_1,…,\lambda_n}$,可以把特征向量当做一列来组成一个矩阵$V = [v^{(1)}, …, v^{(n)}]$,把特征值来组合成一个向量$\lambda = [\lambda_1,…,\lambda_n]$,$A$的特征分解为
$$
A = V diag(\lambda)V^{-1}
$$
可以通过特征值和特征向量来重建$A$。把矩阵分解为特征值和特征向量有助于我们分析理解矩阵。
不是每个矩阵都能分解为特征值和特征向量,有时分解还会产生复数。幸运的是,本书讲解的矩阵大部分都是可以简单分解的。注意一点,每个实数对称矩阵都可以分解,其特征值和特征向量都为实数:
$$
A=Q \Lambda Q^T
$$
其中$Q$是由$A$的特征向量组成的正交矩阵,$\Lambda$是对角矩阵。特征值$\Lambda_{i,i}$对应着矩阵$Q$的第$i$列$Q_{:,i}$
一个实对称矩阵$A$肯定有特征值分解,且特征值分解可能不唯一。如果两个或两个以上的特征向量有相等的特征值,由正交向量组成的集合和这个特征值也是矩阵的特征值分解。为了方便,我们常常将$\Lambda$降序排序;这样的话只有在特征值唯一时,特征分解才唯一。
矩阵的特征值分解给我们带来许多便利。例如,只有矩阵所有特征值为0时,它才是奇异矩阵。实数对称矩阵相乘可以用特征值分解优化,$f(x)=x^TAx$,且$||x||_2=1$;如果$x$是$A$的一个特征值,那么函数结果就是对应的特征向量;函数的最大值和最小值是对应特征值得最大值和最小值。
一个矩阵的所有特征值都大于0,那么就是正定的;如果都大于等于0,那么就是半正定的;如果都小于零,那么就是负定的;如果都小于等于零,那么就是半负定的。
2.8奇异值分解
上一节讲到了特征值分解,这一节来学奇异值分解(singular value decomposition, SVD)。像特征值分解一样,奇异值分解也可以帮助发现矩阵的一些特性;且奇异值分解更具一般性,每个矩阵都有奇异值分解。
特征分解形式为:
$$
A= V diag(\lambda) V^{-1}
$$
奇异值分解形式类似:
$$
A= U D V^T
$$
这里,假设$A$是$m \times n$的矩阵,那么$U$是$m \times m$的矩阵,$D$是$m \times n$的矩阵, $V$是$n \times n$的矩阵。且这三个矩阵有特殊的结构:$U$和$V$都是正交矩阵,$D$是对角矩阵,它不一定是方阵。
$D$叫做$A$的奇异值,$U$的列是$A$的左奇异向量(left-singular vector),$V$的列是$A$的右奇异向量(right-singular vector)。
还可以通过简单的推导,得出奇异值分解和特征分解的关系。
$$
A A^T=(U D V^T)(U D V^T)^T=U D V^T V D^T U^T=U D (V^T V) D^T U^T=U (DD^T) U^{-1}
$$
因为$U$和$V$是正交矩阵:
$$
UU^T=I, \qquad VV^T=I
$$
这样,可以把$U$当做$AA^T$的特征向量。同理,$V$是$A^TA$的特征向量。
奇异值分解的最有用的特性在于可以泛化,使非方阵可以部分求逆。
2.9 广义伪逆矩阵
非方阵的逆矩阵没有定义。假设要对下面等式求解:
$$
Ax=y
$$
$B$是$A$左逆矩阵,等式左边乘以$B$可以得到
$$
x=By
$$
$A$到$B$的映射可能不唯一。$A$为$m \times n$,如果$m >n $,可能没有解;如果$m < n$可能有多个解。广义伪逆矩阵让我们可以无限接近,$A$的广义伪逆矩阵定义:
$$
A^+ = \lim_{\alpha \searrow 0}(A^TA + \alpha I)^{-1} A^T
$$
实际中使用的不是上面的形式,而是奇异值分解定义的形式:
$$
A^+ = V D^+ D^T
$$
$D^+$是把对角矩阵$D$伪逆矩阵,它是把用到了非零元素,之后由结果矩阵转置得到???(is obtained by taking the reciprocal of its non-zero element then taking the transpose of the resulting matrix)。
当$A$中,$m < n$时,可以使用伪逆矩阵中的一个。尤其是经常用到的一个解为:$x=A^+ y$,其中$||x||_2$是所有解中最小的。
当$A$中,$m > n$是可能没有解。这时使用伪逆转置,可以得到离$x$欧拉距离最近的解,即$$||Ax-y||_2$尽可能小。
2.10迹算子
迹算子可以得到矩阵对角线元素的和:
$$
Tr(A)=\sum_i A_{i,j}
$$
迹算子很重要,一些操作可以转换为求和操作,而求和操作需要用到矩阵相乘和迹算子。
例如Frobenius范数定义
$$
||A||_F = \sqrt{Tr(AA^T)}
$$
以迹算子形式定义一些操作,可以得到很多迹算子的性质。例如
$$
Tr(A) = Tr(A^T)
$$
如果是方阵,那么还有循环移动不变的性质
$$
Tr(A B C) = TR(C B A) = Tr(B C A)
$$
更一般的写法:
$$
Tr(\prod_{i=1}^{n} F^{(i)}) = Tr(F^{(n)} \prod_{i=1}^{n-1} F^{(i)})
$$
循环移动可能得到的矩阵大小都不同,例如$A \in R^{m \times n}$,$B \in R^{n \times m}$:
$$
Tr(AB) = Tr(BA)
$$
$AB \in R^{m \times m}$,$BA \in R^{n \times n}$。
对于标量:$a=Tr(a)$。
2.11行列式
一个方矩阵的行列式由 det($A$)表示,它是一个把矩阵映射到实数的函数。一个矩阵的行列式等于其矩阵所有特征值的乘积。行列式的绝对值可以看做矩阵的在某个空间的体积。如果行列式等于零,那么这个空间至少全部收缩到了一维空间,是它体积为零。如果行列式等于1,那么变化过程中体积不变。
2.12 例子:主成成分分析
一个简单的机器学习算法叫做主成成分分析(principal components analysis, PAC),可以使用基本的线性代数来推导。
假设现在有$m$个点的集合${x^{(1)},…,x^{(m)}}$,所有点都在空间$R^n$上。我们打算对这些点实施有损压缩操作,有损压缩意味着占用空间会减少,但是会损失精度。我们想尽可能少的损失精度。
一种方法是把这些点编码到更低的维度空间去。可以找到一种编码方法,对于每个点$x^{(i)} \in R^n$,找到一个向量$c^{(i)} \in R^l$,如果$l < n$,那么编码后的数据占用空间会减少。找到编码函数$f(x)=c$,解码函数可以重建$x$,使得$x \approx g(f(x))$
PCA就是要用到的解码函数,为了使解码简单,解码函数就是矩阵的相乘,映射回到$R^n$。$g(c)=Dc$,其中$D \in R^{n \times l}$,它是定义解码的矩阵。
计算最优的解码矩阵是个难题,为了使问题简单,PCA限制$D$的列互相正交。(注意$D$不是正交矩阵,除非$l=n$)。
这时解还不唯一,为了使解唯一,再加上限制:$D$的列有单位范数。
为了把想法转换为可以实现的算法,首先计算怎么为每个点$x$生成最优的$c^*$。一种方法是尽量减小$x$和它重建后点的距离,在主成分析中,使用$L^2$范数:
$$
c^* = \arg_c \min ||x-g(c)||_2
$$
转换为使用$L^2$的平方形式,因为它非负,且对于非负参数单调递增
$$
c^* = \arg_c \min||x-g(c)||_2^2
$$
即最小化
$$
(x-g(c))^T(x-g(c))
$$
由$L^2$定义展开
$$
x^Tx - x^Tg(c) - g(c)^Tx + g(c)^Tg(c)
$$
因为$x^Tg(c), g(c)^Tx$都是标量
$$
x^Tx - 2x^Tg(c) + g(c)^T g(c)
$$
因为只依赖变量$c$,可以忽略第一项
$$
c^*=\arg_c \min -2x^T g(c) + g(c)^T g(c)
$$
把g(c)的定义代入上式
$$
c^*=\arg_c \min -2x^TDc + c^T D^T D c
$$
即
$$
=\arg_c \min -2x^TDc + c^T I_l c
$$
因为$D$的列正交且有单位范数
$$
=\arg_c \min-2x^T Dc + c^Tc
$$
可以通过矢量微积分来求得上式的解:
$$
\Delta_c(-2x^TDc + c^Tc)=0
$$
即
$$
-2D^Tx+2c=0
$$
得到:
$$
c=D^Tx
$$
这样算法非常高效,对$x$编码,只需要矩阵乘法
$$
f(x)=D^T x
$$
再前面加上矩阵乘法,可以定义PCA重建矩阵操作
$$
\gamma (x) = g(f(x))=DD^Tx
$$
下一步要选择编码矩阵$D$。编码矩阵$D$是的输入矩阵和重建后的矩阵之间的$L^2$最小。编解码使用同一个矩阵,使得计算所有维度的误差矩阵的Frobenius范数最小:
$$
D^*=\arg_D \min \sqrt{\sum_{i,j}(x_j^{(i)} - r(x^{(i)})_j)^2} \qquad subject \quad to \quad D^TD=I_l
$$
先假设$l=1$,因为$\gamma (x)=D^TDx$,上式变为:
$$
d^*=\arg_d \min_d \sum_i||x^{(i)} - dd^Tx^{(i)}||_2^2 \qquad subject \quad to \quad ||d||_2=1
$$
上式是最直接的写法,但是在文体上更习惯把四叔放到左边,可以这样写
$$
d^*=\arg_d \min_d \sum_i||x^{(i)} - d^Tx^{(i)}d||_2^2 \qquad subject \quad to \quad ||d||_2=1
$$
或者把矩阵转置写到一起
$$
d^*=\arg_d \min_d \sum_i||x^{(i)} - x^{(i)}dd^T||_2^2 \qquad subject \quad to \quad ||d||_2=1
$$
把上面的向量写出矩阵形式,$X \in R^{m,n}$
$$
d^* = \arg_d \min |X-Xdd^T||_F^2 \quad subject \quad to \quad d^Td=1
$$
忽略掉上面的约束项,简化Forbenius范式
$$
\arg_d \min Tr( (X- Xdd^t)^T (X- Xdd^T) )
$$
展开后为
$$
\arg_d \min -Tr(X^TXdd^T) - Tr(dd^TX^TX) + Tr(dd^TX^TXdd^T)
$$
和$d$无关的项不影响上面公式的结果
$$
\arg_d \min -2Tr(X^TXdd^T) + Tr(dd^TX^TXdd^T)
$$
对迹算子内擦矩阵进行循环移位
$$
\arg_d \min - 2Tr(X^TXdd^T) + Tr(X^TXdd^Tdd^T)
$$
有约束项$d^Td=1$得到
$$
\arg_d \min -2Tr(X^TXdd^T) + Tr(X^TXdd^T) \quad subject \quad to \quad d^Td=1
$$
可以由特征值分解解决上面的最优化问题,即$d$是矩阵$X^TX$对应的最大的特征值。
在一般情况下,即$l > 1$,矩阵$D$是$l$个最大特征值对应的特征向量。